package top.yinjinbiao.arcface.service;

import com.arcsoft.face.FaceInfo;
import com.arcsoft.face.toolkit.ImageInfo;
import top.yinjinbiao.arcface.domain.entity.FacePerson;
import top.yinjinbiao.arcface.domain.dto.UserCompareInfo;

import java.util.List;

/**
 * @Description 人脸引擎
 * @Author yin.jinbiao
 * @Date 2021/9/27 13:35
 * @Version 1.0
 */
public interface FaceEngineService {

    /**
     * 从图片信息中分离出人脸信息，一张图片中可能有多张人脸
     * @param imageInfo 图片信息
     * @return 图片中的人脸集合
     */
    List<FaceInfo> detectFaces(ImageInfo imageInfo);

    /**
     * 从图片信息中，提取这个faceInfo的特征
     * @param imageInfo 图片信息
     * @param faceInfo 人脸信息
     * @return 分离的人脸特征数据
     */
    byte[] extractFaceFeature(ImageInfo imageInfo,FaceInfo faceInfo);

    /**
     * 将特定的人脸特征，与人脸库比对，过滤低于 passRate 的人脸库数据
     * @param faceFeature 人脸特征
     * @param userInfoList 人脸库
     * @param passRate 相似度
     * @return 人脸比对结果
     */
    List<UserCompareInfo> faceRecognition(byte[] faceFeature, List<FacePerson> userInfoList, float passRate) ;

}
